package com.levi.listener;

import com.levi.pojo.Order;
import com.levi.util.JsonUtils;
import com.levi.util.RedisUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 保证消息幂等性，防止消息重复消费
 * 1. 每次拿到消息之后，先获取消息id
 * 2. 用redis的setnx命令，把messageId当成key设置，如果返回1说明没有消费过，则进行消费，返回0说明存在则不进行消费，直接return
 */
@Component
public class MidengConsumer {
    @Autowired
    private RedisUtils redisUtils;

    @RabbitListener(queues = "queue1")
    public void receive(Message message) {
        String messageId = message.getMessageProperties().getMessageId();
        //返回true说明该消息id没有被消费过，则可以进行消费
        if (!redisUtils.setnx(messageId,messageId)) {
           return;
        }
        String msg = new String(message.getBody());
        //得到订单对象了，然后可以对订单进行操作，根据业务需要进行，发货等操作
        Order order = JsonUtils.jsonToPojo(msg, Order.class);

    }
}
